package com.sun.designpatternsdemo.singleton.bean

/**
 * 版权：xx公司 版权所有
 * @author sun
 * 版本：1.0
 * 创建日期：2021/6/29 13:44
 * 描述：
 *  * 1.单例模式的饿汉式[可用]
 * (1)私有化该类的构造函数
 * (2)通过new在本类中创建一个本类对象
 * (3)定义一个公有的方法，将在该类中所创建的对象返回
 * <p>
 * 优点：从它的实现中我们可以看到，这种方式的实现比较简单，在类加载的时候就完成了实例化，避免了线程的同步问题。
 * 缺点：由于在类加载的时候就实例化了，所以没有达到Lazy Loading(懒加载)的效果，也就是说可能我没有用到这个实例，但是它
 * 也会加载，会造成内存的浪费(但是这个浪费可以忽略，所以这种方式也是推荐使用的)。
 *
 */
class SingletonEHan {
    companion object {

        /**
         * 1.单例模式的饿汉式[可用]
         */
        private val singletonEHan = SingletonEHan()
        fun getInstance(): SingletonEHan {
            return singletonEHan
        }
        //     SingletonEHan instance= SingletonEHan.getInstance();
        /**
         * 2. 单例模式的饿汉式变换写法[可用]
         * 基本没区别
         */
        private var singletonEHanTwo: SingletonEHan? = null
        fun getSingletonEHan(): SingletonEHan? {
            if (singletonEHanTwo == null) {
                singletonEHanTwo = SingletonEHan()
            }
            return singletonEHanTwo
        } //     SingletonEHan instance= SingletonEHan.getSingletonEHan();
    }

    init {
        singletonEHanTwo = SingletonEHan()
    }
}